package 代码coding题OR模拟题;

/**
 * @author aodre , QQ : 480029069
 * @date 2022/12/13 10:09
 */
public class leetcode1832bit位的存储 {

    /*
     这个题的主要在于存储的 形式上面
     可以直接用
     set
     或者使用 数组 来模拟 Map
     或者使用 bitMap
     位图来存储
     */
    public boolean solution(String str){
        // set 方式的判断 我就不写了
        //下面是 数组来模拟 map
        int  map [] = new int[26]; //这种形式会很常见， 如果见到 只有 英文字母的 可以联想到这 样的存储的方式的
        for(char ch : str.toCharArray())
            map[ch - 'a'] = 1;
//            map[ch - 'a']++; 从jvm 底层来看的话 ，这个是不是效率更高一些
        for(int i : map){
            if(i == 0)
                return false;
        }
        return true;
    }

    public boolean solu(String str){
        // 上面是使用数组 来 模拟map
        // 下面直接是使用 bitMap 来存储数据
        /*
        bitMap 来存储数据的话，那么数据的 变化范围只能是 0 or 1 这种形式之类
        正 反
        true false
        男 女
        这些都可以使用 bitmap
        没有第三种情况的出现
         */
        int bit = 0;
        // 而对于该题来说就是，字母 ch 是否存在进行存储， 这样的话就可以使用BitMap 来存储，从而节省很多的空间
        for(char ch : str.toCharArray()){
            // 采用位 运算
            bit |= 1 << ch - 'a';
        }
        // 如果 int 32 位 中后 26 位 全 1 则 true
        return 1 << 26 == bit + 1;

    }



}
